package com.zrk.oop;

import org.w3c.dom.css.Rect;

public class ExternClassLearn {
    public static void main(String[] args) {
        Student liHua = new Student("Li Hua", 23, "2017061128");
        String name = liHua.getName();

        // 父类中的方法可以正常使用
        System.out.println(name);
        // 父类的toString方法明显不符合要求了，需要重写
        System.out.println(liHua);
    }
}


/**
 * 通过继承，子类无法访问父类的私有属性
 * 此时，可以使用:
 *  1.父类中的属性改为 protected 之后使用super关键字访问
 *  2.使用父类的构造方法 super() 传入参数
 */
class Student extends Person {

    String stuId;

    /**
     * 在Java中，任何class的构造方法，第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法，编译器会帮我们自动加一句super();
     * 如果父类没有默认的构造方法，子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。
     * 子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的，不是继承的。
     * @param name
     * @param age
     * @param stuId
     */
    public Student(String name, int age, String stuId) {
        // super();
        super(name, age);
        this.name = name;
        this.stuId = stuId;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuId='" + stuId + '\'' +
                ",name='" + super.getName() + '\'' +
                ",age='" + super.getAge() + '\'' +
                '}';
    }
}
